package torres.entity;

import java.util.*;

import torres.item.effect.DecrementManaEffect;
import torres.item.effect.Effect;
import torres.item.effect.HealEffect;

/**
 * @author Torres
 * A specific Occupation that specializes in magical spells.
 * The primary stat of a Sneak is Agility.
 */
@SuppressWarnings("serial")
public class Summoner implements Occupation {
	private List<Ability> summonerAbilityList;
	private final Stat summonerPrimaryStat = Stat.INTELLECT;
	private final Job job = Job.SUMMONER;
	private double summonerStrengthMultiplier;
	private double summonerAgilityMultiplier;
	private double summonerIntellectMultiplier;
	private final String name = "Summoner";
	
	/**
	 * Creates a default Summoner 
	 */
	public Summoner() { // Default Constrcutor
		summonerAbilityList = new ArrayList<Ability>();
		List<Effect> effects = new ArrayList<Effect>();
		List<Effect> costEffects = new ArrayList<Effect>();
		effects.add(new HealEffect(10));
		costEffects.add(new DecrementManaEffect(10));
		Ability ability = new Ability("Heal", 1, costEffects, effects);
		summonerAbilityList.add(ability);
		summonerStrengthMultiplier = 1.15;
		summonerAgilityMultiplier = 1.15;
		summonerIntellectMultiplier = 1.3;
	}
	
	/**
	 * Creates a new Summoner with the specified values. 
	 * @param abilityList The ability list.
	 * @param strength The strength multiplier.
	 * @param agility The agility multiplier.
	 * @param intellect The intellect multiplier.
	 */
	public Summoner(List<Ability> abilityList, double strength, double agility, double intellect) {
		this.summonerAbilityList = abilityList;
		this.summonerStrengthMultiplier = strength;
		this.summonerAgilityMultiplier = agility;
		this.summonerIntellectMultiplier = intellect;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getAgilityMultiplier()
	 */
	public double getAgilityMultiplier() {
		return summonerAgilityMultiplier;
	}
	
	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getIntellectMultiplier()
	 */
	public double getIntellectMultiplier() {
		return summonerIntellectMultiplier;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getPrimaryStat()
	 */
	public Stat getPrimaryStat() {
		return summonerPrimaryStat;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getStrengthMultiplier()
	 */
	public double getStrengthMultiplier() {
		return summonerStrengthMultiplier;
	}

	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getAbilityList()
	 */
	public List<Ability> getAbilityList() {
		return summonerAbilityList;
	}
	
	/* (non-Javadoc)
	 * @see torres.entity.Occupation#getJob()
	 */
	public Job getJob() {
		return job;
	}
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return name;
	}
}
